home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 1 (Walnut Creek)
/
Aminet - June 1993 [Walnut Creek].iso
/
usenet
/
sources
/
volume89
/
util
/
colset.1
< prev
next >
Wrap
Internet Message Format
|
1989-11-02
|
54KB
Path: xanth!samsung!cs.utexas.edu!sun-barr!newstop!sun!swap!page
From: page%swap@Sun.COM (Bob Page)
Newsgroups: comp.sources.amiga
Subject: v89i193: column_set -- join lines into columns
Message-ID: <127256@sun.Eng.Sun.COM>
Date: 2 Nov 89 03:53:32 GMT
Sender: news@sun.Eng.Sun.COM
Lines: 1297
Approved: page@sun.com
Submitted-by: xanthian@well.sf.ca.us (Kent Paul Dolan)
Posting-number: Volume 89, Issue 193
Archive-name: util/colset.1
column_set accepts input as one "word" per line and produces these
"words" layed out in the same order in even columns, as many as will fit
across the output screen or page with at least one space between columns.
[Useful for 'dir' listings -- sample directory lister included.
Source is in modula-2. Encoded executable also included. ..bob]
# This is a shell archive.
# Remove anything above and including the cut line.
# Then run the rest of the file through 'sh'.
# Unpacked files will be owned by you and have default permissions.
#----cut here-----cut here-----cut here-----cut here----#
#!/bin/sh
# shar: SHell ARchive
# Run the following text through 'sh' to create:
# README
# ld
# column_set.MOD
# column_set.doc
# column_set.uu
# This is archive 1 of a 1-part kit.
# This archive created: Wed Nov 1 19:46:18 1989
echo "extracting README"
sed 's/^X//' << \SHAR_EOF > README
XEnclosed are:
X
Xcolumn_set.MOD - BENCHMARK Modula-2 source code for the column_set executable.
X
Xcolumn_set.doc - an excuse sheet for foisting this program on an unsuspecting
X Amiga community.
X
Xcolumn_set - an executable to typeset a file of one "word" per line into
X as many even columns as will fit across a page with at least
X one space between columns, with lots of options.
X
Xld - a primitive directory listing AmigaDOS script (hopefully
X self documenting) which uses the column_set executable to
X lay out a listing of a directory with more than two columns
X of (sorted) file names. Uses AmigaDOS functions "list" and
X "sort", my "column_set", and the PD routine "less". This
X is included because it was my dissatisfaction with the "dir"
X output that led me to write column_set in the first place.
X In typical Unix(tm) fashion, I used working routines where
X possible, and wrote only the minimum additional code needed
X to complete the task, as "column_set.MOD". Script "ld" is
X a moderately interesting example in itself for those, like
X me, to whom the AmigaDOS Manual's description of script
X construction leaves working examples lacking, and concepts
X unclear.
X
X
XKent Paul Dolan, xanthian@well.sf.ca.us, 27 October 1989
SHAR_EOF
echo "extracting ld"
sed 's/^X//' << \SHAR_EOF > ld
X.KEY pathname,width,dirtag
X.DEF pathname ""
X.DEF width 77
X.DEF dirtag /
X.BRA {
X.KET }
X; AmigaDOS script "ld" by Kent Paul Dolan
X;
X; Accepts a single parameter, the pathname of the directory to be listed.
X; Produces a sorted directory with as many columns as will fit in a full
X; width (77 character wide) Amiga bordered window, such as the one for
X; the AmigaShell or, here, the "less" file display utility, and displays
X; it using the PD "less" utility. All work files are in "T:" and are
X; deleted at the end of the script. The "column_set" program is a small
X; PD Modula-2 utility written by the author of this script.
X;
X; Create a single column listing of the files in <pathname>
X;
Xlist > t:ld.1 {pathname} files lformat="%S"
X;
X; Add the directories to the listing, but flag them with a tag string to
X; distinguish them from the files.
X;
Xlist >> t:ld.1 {pathname} dirs lformat="%S{dirtag}"
X;
X; Sort the lot together.
X;
Xsort from t:ld.1 to t:ld.2
X;
X; Use my PD Modula-2 utility to rearrange the names into as many columns
X; as will fit in a full sized window; "column_set" does one pass to
X; size the file names looking for the longest name, and a second pass
X; to create the output from the input. Input is a file with one file or
X; directory name per line, output is the same set of names set in columns.
X;
Xcolumn_set -w {width} t:ld.2 t:ld.3
X;
X; Use the PD "less" utility to put up a window in which the directory
X; names may be scrolled up and down; if you don't have "less", replace
X; it here with "more", the standard AmigaDOS text file display routine.
X;
Xless t:ld.3
X;
X; Clean up the work files.
X;
Xdelete t:ld.1 t:ld.2 t:ld.3
SHAR_EOF
echo "extracting column_set.MOD"
sed 's/^X//' << \SHAR_EOF > column_set.MOD
XMODULE column_set;
X
X(* Copyright 1989 by Kent Paul Dolan, USENet: xanthian@well.sf.ca.us *)
X(* Use it as you wish, but leave me a little credit somewhere in the result! *)
X
X(* Developed with BENCHMARK Modula-2 from Avante-Garde Software *)
X
X(* Purpose: to lay out "words" from a file of one word per line in as many *)
X(* columns as will fit across the page with at least one space between *)
X(* columns. Command usage is described further down in the code. This code *)
X(* was written to provide a filter in a script for making the output of the *)
X(* AmigaDOS "list lformat="%S" command look like the Unix "ls" output, but *)
X(* looks useful as an independent command, as well. *)
X
X(* It is a modest attempt at mixing a Unix and an AmigaDOS command format in *)
X(* a small utility, while reasonably bullet-proofing the routine from command *)
X(* line errors or i/o problems. The working guts of the program, without *)
X(* the frills, takes up 1/3 the source and 1/2 the runtime space; this is an *)
X(* exercise in doing the job "right", for the fun of it. Kent. *)
X
XFROM System IMPORT argc, argv, StdInput, StdOutput;
X
XFROM InOut IMPORT WriteString, WriteInt, WriteLn, Write, Read, OpenInputFile,
X OpenOutputFile, Done, CloseInput, CloseOutput, EOL;
X
XIMPORT Terminal;
X
XFROM Terminal IMPORT eof;
X
XFROM FileSystem IMPORT Response, File, Lookup, Close, Delete, ReadChar,
X WriteChar;
X
XFROM Strings IMPORT CompareStringCAP, LocateChar, CopyString, Relation;
X
XCONST
X DefaultWindowWidth = 77;
X TempFileName = "T:column_set.temp";
X
XTYPE
X CommandLineParam = ARRAY [0..255] OF CHAR;
X
XVAR
X Ch: CHAR;
X
X InFile,
X OutFile: CommandLineParam;
X
X MaxLength,
X WindowWidth,
X ThisLength,
X MaxColumns,
X NumColumns,
X ThisColumn,
X NumSpaces,
X I: INTEGER;
X
X TempFile: File;
X
X UsingStdInput,
X UsingStdOutput,
X WentOK: BOOLEAN;
X
X(*
X** Usage: column_set [[FROM | -i] infile] [[TO | -o] outfile] [[WIDTH | -w] nn]
X** [[MAXCOL | -m] mm]
X**
X** infile is the input file, one "word" per line;
X** outfile is the output file, with the same words in the same order laid out
X** in columns evenly across the page or screen;
X** width is the number of character positions across the screen or page;
X** default is 77 to fit a standard AmigaDOS window;
X** maxcol limits the number of columns of words which will be set across the
X** page to less than the maximum possible; default is (width+1)/2;
X**
X** where infile, outfile, width and maxcol are positional parameters unless the
X** keywords are present. If no infile is given, standard input is used, and
X** a temporary file "column_set.temp" is created and deleted to allow a second
X** pass over the input data. If an infile is given, it is closed and reopened
X** for the second pass over the data. If no outfile is given, standard output
X** is used.
X*)
X
XPROCEDURE usage;
XBEGIN
X WriteLn;
X WriteString
X ("Usage: column_set [FROM | -i] infile [TO | -o] outfile [WIDTH | -w] ww");
X WriteLn;
X WriteString
X (" [MAXCOL | -m] mm]");
X WriteLn;
X WriteString
X (" or: column_set < infile > outfile [{WIDTH | -w} ww] [{MAXCOL | -m} mm]");
X WriteLn;
X WriteString
X (" or: column_set [(WIDTH | -w} ww] [{MAXCOL | -m} mm] infile outfile");
X WriteLn;
X WriteString
X ("or other likely combinations; infile, outfile, ww, and mm are positional");
X WriteLn;
X WriteString
X ("without keywords, position independent with keywords, and mixes are read");
X WriteLn;
X WriteString
X ("by trying to pick off first the keyword parmameters, then the missing");
X WriteLn;
X WriteString
X ("positional parameters in order from what is left over.");
X WriteLn;
X WriteString
X ("'Infile' is the input file, expected to contain one 'word' per line;");
X WriteLn;
X WriteString
X ("'outfile' is the output file, which will contain the same 'words' in the");
X WriteLn;
X WriteString
X ("same order laid out in as many even columns as will fit across the");
X WriteLn;
X WriteString
X ("page or screen; 'ww' is the width of the screen or page in character");
X WriteLn;
X WriteString
X ("positions; 'mm' is the most 'words' the user wants per line, to limit");
X WriteLn;
X WriteString
X ("them below the most possible in case a sparser layout is desired.");
X WriteLn;
X WriteString
X ("If infile and/or outfile are not specified, they default to standard");
X WriteLn;
X WriteString
X ("input and output; width (ww) defaults to 77 columns to match the");
X WriteLn;
X WriteString
X ("AmigaShell window, and maxcol (mm) defaults to (width+1)/2.");
X WriteLn;
X WriteString
X (" /s/ Kent Paul Dolan, USENet: xanthian@well.sf.ca.us");
X WriteLn;
X WriteLn;
X RETURN;
XEND usage;
X
XPROCEDURE getcmdline
X (VAR infile, outfile: ARRAY OF CHAR;
X VAR width: INTEGER; VAR maxcol: INTEGER): BOOLEAN;
XVAR
X J, MyArgc, UnusedArgs: INTEGER;
X Unused: ARRAY [0..15] OF INTEGER;
X
XPROCEDURE getwidth(VAR width: INTEGER; token: ARRAY OF CHAR): BOOLEAN;
XVAR
X CharIndex, DigitValue: INTEGER;
X
XBEGIN
X CharIndex := 0;
X(*
X WriteString(argv^[J+1]^); WriteLn;
X*)
X WHILE (ORD(token[CharIndex]) <> 0) DO
X DigitValue := LocateChar("0123456789",token[CharIndex],0,9);
X IF ( DigitValue = -1 ) THEN
X WriteString("column_set: Error -- non-digit in width parameter");
X WriteLn;
X RETURN FALSE;
X ELSE
X width := 10 * width + DigitValue;
X END;
X CharIndex := CharIndex + 1;
X END;
X RETURN TRUE;
XEND getwidth;
X
XPROCEDURE getmaxcol(VAR maxcol: INTEGER; token: ARRAY OF CHAR): BOOLEAN;
XVAR
X CharIndex, DigitValue: INTEGER;
X
XBEGIN
X CharIndex := 0;
X(*
X WriteString(argv^[J+1]^); WriteLn;
X*)
X WHILE (ORD(token[CharIndex]) <> 0) DO
X DigitValue := LocateChar("0123456789",token[CharIndex],0,9);
X IF ( DigitValue = -1 ) THEN
X WriteString("column_set: Error -- non-digit in maxcol parameter");
X WriteLn;
X RETURN FALSE;
X ELSE
X maxcol := 10 * maxcol + DigitValue;
X END;
X CharIndex := CharIndex + 1;
X END;
X RETURN TRUE;
XEND getmaxcol;
X
XBEGIN (* getcmdline *)
X
X CopyString(infile,"");
X CopyString(outfile,"");
X width := 0;
X UnusedArgs := 0;
X
X FOR J := 0 TO 15 BY 1 DO
X Unused[J] := 0;
X END;
X
X MyArgc := argc;
X(*
X WriteString("MyArgc"); WriteInt(MyArgc,4); WriteLn;
X*)
X (* Pull out any keyword arguments from the command line: *)
X J := 1;
X WHILE (J < MyArgc) DO
X(*
X WriteString(argv^[J]^);
X*)
X IF
X (
X ( CompareStringCAP( argv^[J]^ , "-i" ) = equal )
X OR
X ( CompareStringCAP( argv^[J]^ , "FROM" ) = equal )
X ) THEN
X IF ( J + 1 >= MyArgc ) THEN
X WriteString
X("column_set: Error -- '-i' or 'FROM' was last argument on command line");
X WriteLn;
X RETURN FALSE;
X ELSE
X CopyString(infile,argv^[J+1]^);
X(*
X WriteString(argv^[J+1]^); WriteLn;
X*)
X J := J + 2;
X END;
X ELSIF
X (
X ( CompareStringCAP( argv^[J]^ , "-o" ) = equal )
X OR
X ( CompareStringCAP( argv^[J]^ , "TO" ) = equal )
X ) THEN
X IF ( J + 1 >= MyArgc ) THEN
X WriteString
X("column_set: Error -- '-o' or 'TO' was last argument on command line");
X WriteLn;
X RETURN FALSE;
X ELSE
X CopyString(outfile,argv^[J+1]^);
X(*
X WriteString(argv^[J+1]^); WriteLn;
X*)
X J := J + 2;
X END;
X ELSIF
X (
X ( CompareStringCAP( argv^[J]^ , "-w" ) = equal )
X OR
X ( CompareStringCAP( argv^[J]^ , "WIDTH" ) = equal )
X ) THEN
X IF ( J + 1 >= MyArgc ) THEN
X WriteString
X("column_set: Error -- '-w' or 'WIDTH' was last argument on command line");
X WriteLn;
X RETURN FALSE;
X ELSE
X width := 0;
X IF ( NOT getwidth(width,argv^[J + 1]^) ) THEN
X RETURN FALSE;
X END;
X J := J + 2;
X END;
X ELSIF
X (
X ( CompareStringCAP( argv^[J]^ , "-m" ) = equal )
X OR
X ( CompareStringCAP( argv^[J]^ , "MAXCOL" ) = equal )
X ) THEN
X IF ( J + 1 >= MyArgc ) THEN
X WriteString
X("column_set: Error -- '-m' or 'MAXCOL' was last argument on command line");
X WriteLn;
X RETURN FALSE;
X ELSE
X maxcol := 0;
X IF ( NOT getmaxcol(maxcol,argv^[J + 1]^) ) THEN
X RETURN FALSE;
X END;
X J := J + 2;
X END;
X ELSE
X Unused[UnusedArgs] := J;
X UnusedArgs := UnusedArgs + 1;
X J := J + 1;
X END;
X END;
X
X (* Pull out any remaining positional arguments from the command line: *)
X J := 0;
X IF ( ( CompareStringCAP(infile,"") = equal ) AND (J < UnusedArgs) ) THEN
X CopyString(infile,argv^[Unused[J]]^);
X J := J + 1;
X END;
X IF ( ( CompareStringCAP(outfile,"") = equal ) AND (J < UnusedArgs) ) THEN
X CopyString(outfile,argv^[Unused[J]]^);
X J := J + 1;
X END;
X IF ( width = 0 ) AND (J < UnusedArgs) THEN
X IF ( NOT getwidth(width,argv^[Unused[J]]^) ) THEN
X RETURN FALSE;
X END;
X J := J + 1;
X END;
X IF ( width = 0) THEN
X width := DefaultWindowWidth;
X END;
X IF ( maxcol = 0 ) AND (J < UnusedArgs) THEN
X IF ( NOT getmaxcol(maxcol,argv^[Unused[J]]^) ) THEN
X RETURN FALSE;
X END;
X J := J + 1;
X END;
X IF ( maxcol = 0 ) THEN
X maxcol := (width + 1) DIV 2;
X END;
X(*
X WriteLn;
X*)
X RETURN TRUE;
XEND getcmdline;
X
XPROCEDURE writebitch;
XBEGIN
X WriteString("column_set: Error -- problem writing OutFile = ");
X WriteString(OutFile);
X WriteLn;
X IF (UsingStdInput) THEN
X Close(TempFile);
X Delete(TempFileName);
X END;
X IF (NOT UsingStdOutput) THEN
X CloseOutput;
X END;
X RETURN;
XEND writebitch;
X
XBEGIN (* column_set *)
X
XIF ( argc > 1 ) THEN
X IF ( CompareStringCAP(argv^[1]^,"?") = equal ) THEN
X usage;
X RETURN;
X END;
XEND;
X
XIF ( NOT getcmdline(InFile,OutFile,WindowWidth,MaxColumns) ) THEN
X WriteString("column_set: Error -- unable to correctly parse command line!");
X WriteLn;
X usage;
X RETURN;
X(*
XELSE
X WriteString("InFile = "); WriteString(InFile); WriteLn;
X WriteString("OutFile = "); WriteString(OutFile); WriteLn;
X WriteString("WindowWidth = "); WriteInt(WindowWidth,1); WriteLn;
X WriteString("MaxColumns = "); WriteInt(MaxColumns,1); WriteLn;
X*)
XEND;
X
XIF (CompareStringCAP(InFile,"") = equal) THEN
X UsingStdInput := TRUE;
XELSE
X UsingStdInput := FALSE;
XEND;
X
XIF (CompareStringCAP(OutFile,"") = equal) THEN
X UsingStdOutput := TRUE;
XELSE
X UsingStdOutput := FALSE;
XEND;
X
XIF ( UsingStdInput) THEN
X Lookup(TempFile,TempFileName,TRUE);
X IF (TempFile.res <> done) THEN
X WriteString
X ("column_set: Error -- unable to open new work file T:column_set.temp");
X WriteLn;
X RETURN;
X END;
X(*
X WriteString("column_set: taking data from standard input"); WriteLn;
X*)
XELSE
X OpenInputFile(InFile);
X IF (NOT Done) THEN
X WriteString("column_set: Error -- file open failed for InFile = ");
X WriteString(InFile); WriteLn;
X RETURN;
X END;
X(*
X WriteString("column_set: taking data from a named file"); WriteLn;
X*)
XEND;
X
XMaxLength := 0;
XThisLength := 0;
XWentOK := TRUE;
X
XIF ( UsingStdInput ) THEN
X Terminal.Read(Ch);
X IF (eof) THEN
X WriteString
X ("column_set: Error -- standard input looks empty in counting pass");
X WentOK := FALSE;
X END;
XELSE
X Read(Ch);
X IF (NOT Done) THEN
X WriteString("column_set: Error -- input file looks empty in counting pass");
X WentOK := FALSE;
X END;
XEND;
X
XIF (NOT WentOK) THEN
X WriteLn;
X Close(TempFile);
X Delete(TempFileName);
X IF (NOT UsingStdInput) THEN
X CloseInput;
X END;
X RETURN;
XEND;
X
XLOOP
X IF ( UsingStdInput ) THEN
X WriteChar(TempFile,Ch);
X IF (TempFile.res = notdone) THEN
X WriteString
X ("column_set: Error -- problem writing to file T:column_set.temp");
X WriteLn;
X Close(TempFile);
X Delete(TempFileName);
X RETURN;
X END;
X END;
X IF (Ch <> EOL) THEN
X ThisLength := ThisLength + 1;
X ELSE
X IF (ThisLength > MaxLength) THEN
X MaxLength := ThisLength;
X END;
X ThisLength := 0;
X END;
X IF (UsingStdInput) THEN
X Terminal.Read(Ch);
X IF (eof) THEN
X EXIT;
X END;
X ELSE
X Read(Ch);
X IF (NOT Done) THEN
X EXIT;
X END;
X END;
XEND;
X
XIF ( UsingStdInput ) THEN
X Close(TempFile);
X IF (TempFile.res = notdone) THEN
X WriteString
X ("column_set: Error -- unable to close file T:column_set.temp after");
X WriteString(" counting pass"); WriteLn;
X RETURN;
X END;
X Lookup(TempFile,TempFileName,FALSE);
X IF (TempFile.res <> done) THEN
X WriteString
X ("column_set: Error -- unable to open file T:column_set.temp before");
X WriteString(" writing pass"); WriteLn;
X Delete(TempFileName);
X RETURN;
X END;
XELSE
X CloseInput;
X OpenInputFile(InFile);
X IF (NOT Done) THEN
X WriteString("column_set: Error -- File reopen failed for InFile = ");
X WriteString(InFile); WriteLn;
X RETURN;
X END;
XEND;
X
XIF (NOT UsingStdOutput) THEN
X OpenOutputFile(OutFile);
X IF (NOT Done) THEN
X WriteString("column_set: Error -- file open failed for OutFile = ");
X WriteString(OutFile); WriteLn;
X Close(TempFile);
X Delete(TempFileName);
X RETURN;
X END;
XEND;
X
XNumColumns := (WindowWidth + 1) DIV (MaxLength + 1);
XIF (NumColumns > MaxColumns) THEN
X NumColumns := MaxColumns;
XEND;
XIF (NumColumns > 1) THEN
X NumSpaces := (WindowWidth - (NumColumns * MaxLength)) DIV (NumColumns - 1);
XELSE
X NumSpaces := 0;
XEND;
X
XThisLength := 0;
XThisColumn := 0;
XIF ( UsingStdInput ) THEN
X ReadChar(TempFile,Ch);
X IF (TempFile.res <> done) THEN
X IF (TempFile.eof) THEN
X WriteString
X("column_set: Error -- Temporary Input File Looks Empty In Writing Pass");
X WriteLn;
X ELSE
X WriteString
X ("column_set: Error -- problem reading from T:column_set.temp");
X END;
X Close(TempFile);
X Delete(TempFileName);
X IF (NOT UsingStdOutput) THEN
X CloseOutput;
X END;
X RETURN;
X END;
XELSE
X Read(Ch);
X IF (NOT Done) THEN
X WriteString("column_set: Error -- Input File Looks Empty In Writing Pass");
X WriteLn;
X IF (NOT UsingStdOutput) THEN
X CloseOutput;
X END;
X CloseInput;
X RETURN;
X END;
XEND;
X
XLOOP
X IF (Ch <> EOL) THEN
X ThisLength := ThisLength + 1;
X IF ( UsingStdOutput ) THEN
X Terminal.Write(Ch);
X(*
X Module InOut "Done" documentation is buggy; omit checks after write;
X Wirth didn't specify them, and BENCHMARK doesn't support them.
X No way to check "Terminal" output result - not good when redirected
X to a disk file that might overflow!
X
X WriteString("column_set: Error -- problem writing standard output");
X*)
X ELSE
X Write(Ch);
X(*
X Module InOut "Done" documentation is buggy; omit checks after write;
X Wirth didn't specify them, and BENCHMARK doesn't support them.
X IF (NOT Done) THEN
X writebitch;
X RETURN;
X END;
X*)
X END;
X ELSE
X ThisColumn := ThisColumn + 1;
X IF (ThisColumn < NumColumns) THEN
X FOR I := ThisLength + 1 TO MaxLength + NumSpaces BY 1 DO
X IF (UsingStdOutput) THEN
X Terminal.Write(" ");
X ELSE
X Write(" ");
X IF (NOT Done) THEN
X writebitch;
X RETURN;
X END;
X END;
X END;
X ELSE
X IF (UsingStdOutput) THEN
X Terminal.WriteLn;
X ELSE
X Write(EOL);
X(*
X Module InOut "Done" documentation is buggy; omit checks after write;
X Wirth didn't specify them, and BENCHMARK doesn't support them.
X
X IF (NOT Done) THEN
X writebitch;
X RETURN;
X END;
X*)
X END;
X ThisColumn := 0;
X END;
X ThisLength := 0;
X END;
X IF ( UsingStdInput ) THEN
X ReadChar(TempFile,Ch);
X IF (TempFile.res <> done) THEN
X IF (TempFile.eof) THEN
X EXIT;
X ELSE
X WriteString
X ("column_set: Error -- problem reading from T:column_set.temp");
X Close(TempFile);
X Delete(TempFileName);
X IF (NOT UsingStdOutput) THEN
X CloseOutput;
X END;
X RETURN;
X END;
X END;
X ELSE
X Read(Ch);
X IF (NOT Done) THEN (* Unable to differentiate read error from eof *)
X EXIT;
X END;
X END;
XEND;
X
XIF (ThisColumn <> 0) THEN
X IF (UsingStdOutput) THEN
X Terminal.WriteLn;
X ELSE
X Write(EOL);
X(*
X Module InOut "Done" documentation is buggy; omit checks after write;
X Wirth didn't specify them, and BENCHMARK doesn't support them.
X IF (NOT Done) THEN
X writebitch;
X RETURN;
X END;
X*)
X END;
XEND;
X
XIF ( UsingStdInput ) THEN
X Close(TempFile);
X Delete(TempFileName);
XELSE
X CloseInput;
XEND;
X
XIF (NOT UsingStdOutput) THEN
X CloseOutput;
XEND;
X
XEND column_set.
SHAR_EOF
echo "extracting column_set.doc"
sed 's/^X//' << \SHAR_EOF > column_set.doc
XDocumentation for Modula-2 program column_set, by Kent Paul Dolan.
X
XThe purpose of column _set is to act as a text filter, accepting a file
Xwith one "word" per line (the original was the output of the AmigaDOS
Xcommand 'list lformat="%S"', after being sorted) as input, and producing a
Xfile with these "words" layed out in the same order in even columns, as
Xmany as will fit across the output screen or page with at least one space
Xbetween columns.
X
XThe default input is the standard input, the default output is the standard
Xoutput, the default output file line width is 77 character positions to
Xmatch the AmigaShell window default width, and the default maximum allowed
Xnumber of "words" or layout columns per line (maxcol) is (width+1)/2 to
Xallow for laying out single character "words" with one space after all but
Xthe last one on a line.
X
XOptionally, command line parameters or redirection can name the input and
Xoutput files, and command line parameters can modify the width and maxcol
Xparameters. The parameters are positional, in order: infile, outfile, width,
Xmaxcol, with missing parameters defaulted, but AmigaDOS style keywords can
Xoverride the positional nature of the parameters, and optionally Unix style
X"-flag" type keywords can do the same. Also, the command line is scanned
Xtwice, first to pull off keywords and their associated parameters, then to
Xpull off missing positional parameters in order from any left over command
Xline tokens, so some grotesque mixes of parameter styles work as hoped.
X
XExcept for errors writing output files, which sadly are not checked for in
XModula-2's standard i/o module, "all" identified error conditions are
Xcaught and reported to the user.
X
XDoing the column layout requires two passes over the input data, one to
Xfind the largest "word" in the input, which allows column number and
Xspacing to be calculated, and one to copy the "words" to the output. Since
Xstandard input may come from the keyboard, and so be unrewindable, in the
Xcase that input is from standard input, a copy of the input is written to a
Xtemporary file in "T:column_set.temp" for use in the second pass, then
Xdeleted when the filter is ready to exit. (On a Unix system, this should be
Xchanged in the source code to "/tmp/column_set.temp", but I cannot do it on
Xmy Amiga because I don't have a conditional compilation prepass available.)
X
XProgram usage may be seen by typing in "column_set ?", and is reported when
Xa command line error is detected as well. Without going into all the
Xpossibilities of defaults, of mixing positional with keyword parameters,
Xand of mixing Unix with AmigaDOS keywords; the usage, completely default,
Xredirected, positional, AmigaDOS keyword, and Unix keyword formats,
Xrespectively, look like this, where "infile" and "outfile" are file path
Xnames, "ww" and "mm" are integers, and the spaces between keyword tokens
Xand parameter tokens are mandatory:
X
X column_set ?
X column_set
X column_set < infile > outfile [{WIDTH | -w} ww] [{MAXCOL | -m} mm]
X column_set infile outfile ww mm
X column_set FROM infile TO outfile WIDTH ww MAXCOL mm
X column_set -i infile -o outfile -w ww -m mm
X
Xwhile, just for example, this will also work:
X
X column_set MaXCoL mm -o outfile widTH ww infile
X
Xwhich is arrant nonsense, but did keep me up until dawn finding ways it
Xwouldn't work and fixing them.
X
XAs expected, the program doesn't see the redirection commands in the
Xversion of the command line passed to it in the environment, so if you
Xredirect anything, keyword all the other parameters (really, the
Xfunctionality is less strict than that, but that is surely safe), or you
Xmight get positional parameter tokens attached to the wrong parameters.
X
XWhen the command line handling and file handling code are stripped away,
Xthe remaining algorithm is simplicity itself: on the first pass through the
Xinput data, find the length of the longest input "word"; when done with the
Xfirst pass, determine how many such words will fit on a line with at least
Xone space between words, and how many spaces can be put between that many
Xwords without overflowing the line; on the second pass, copy words from
Xinput to output, following each but the last on each line with that number
Xof spaces, and the last on each line with a newline, until all the words
Xare copied. A special case puts a newline rather than spaces after the
Xlast word of the input, if it would not normally be the last word on a
Xline.
X
XThe program is copyrighted, but this is no big deal; steal what you want,
Xjust spell my name right in the credits, and don't take a profit on the
Xwhole thing (snips and snatches are OK) without cutting me in on the swag.
XThanks!
X
XOh, yeah, to be fair, AmigaDOS, Amiga, and probably AmigaShell are trademarks
Xbelonging to Commodore, while Unix belongs to AT&T.
X
XKent Paul Dolan, 26 October 1989, Mountain View, California.
X
XExample of use:
X
XFrom the commands run in the Amiga directory where this code was developed
X
X list > t:junk1 lformat="%S"
X sort t:junk1 t:junk2
X column_set < t:junk2 > t:junk3
X
Xat the end, t:junk3 looked like this:
X
Xcolumn_set column_set.doc column_set.MOD
Xcolumn_set.OBM column_set.RFM column_set.uu
Xcolumn_set2.MOD column_set3.MOD jvert
Xmycopy1.MOD mycopy2.MOD mycopy3.MOD
XScheduleBasics.DEF ScheduleBasics.MOD SchedulePerson.DEF
XSchedulePerson.MOD ScheduleTask.DEF ScheduleTask.MOD
XSchedule_V0.01.MOD TimeSliceHandler.DEF TimeSliceHandler.MOD
Xtvert
X
Xwhich allows a directory half again as long to fit on a single screen, by
Xlaying it out in three columns instead of two. Of such small increments is
Xhappiness constructed. Kent.
X
SHAR_EOF
echo "extracting column_set.uu"
sed 's/^X//' << \SHAR_EOF > column_set.uu
X
Xbegin 644 column_set
XM```#\P`````````)``````````@````,```'B````/X```+1```!,````&(`&
XM``%K````CP```$\```/I````#$ZY````0DZY````"$ZY````!$ZY````"$ZY[
XM````"$ZY````NDZY````!$[Y```,9````^P````!`````@````(````!`````
XM!P````@````!````"`````X````!````!````!0````!````!0```!H````!@
XM`````P```"`````!````!@```"8````!`````0```"P````````#\@```^D`?
XM``>(````````````````````````````````````````````````````````/
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM````````````````````````````````````````````5#IC;VQU;6Y?<V5T'
XM+G1E;7``57-A9V4Z(&-O;'5M;E]S970@6T923TT@?"`M:5T@:6YF:6QE(%M4P
XM3R!\("UO72!O=71F:6QE(%M724142"!\("UW72!W=P`@("`@("`@6TU!6$-/5
XM3"!\("UM72!M;5T`("`@;W(Z(&-O;'5M;E]S970@/"!I;F9I;&4@/B!O=71F9
XM:6QE(%M[5TE$5$@@?"`M=WT@=W==(%M[34%80T],('P@+6U](&UM70`@("!OK
XM<CH@8V]L=6UN7W-E="!;*%=)1%1(('P@+7=]('=W72!;>TU!6$-/3"!\("UM`
XM?2!M;5T@:6YF:6QE(&]U=&9I;&4`;W(@;W1H97(@;&EK96QY(&-O;6)I;F%T]
XM:6]N<SL@:6YF:6QE+"!O=71F:6QE+"!W=RP@86YD(&UM(&%R92!P;W-I=&EO!
XM;F%L`'=I=&AO=70@:V5Y=V]R9',L('!O<VET:6]N(&EN9&5P96YD96YT('=I6
XM=&@@:V5Y=V]R9',L(&%N9"!M:7AE<R!A<F4@<F5A9`!B>2!T<GEI;F<@=&\@(
XM<&EC:R!O9F8@9FER<W0@=&AE(&ME>7=O<F0@<&%R;6%M971E<G,L('1H96X@L
XM=&AE(&UI<W-I;F<`<&]S:71I;VYA;"!P87)A;65T97)S(&EN(&]R9&5R(&9R<
XM;VT@=VAA="!I<R!L969T(&]V97(N`"=);F9I;&4G(&ES('1H92!I;G!U="!F9
XM:6QE+"!E>'!E8W1E9"!T;R!C;VYT86EN(&]N92`G=V]R9"<@<&5R(&QI;F4[=
XM`"=O=71F:6QE)R!I<R!T:&4@;W5T<'5T(&9I;&4L('=H:6-H('=I;&P@8V]N+
XM=&%I;B!T:&4@<V%M92`G=V]R9',G(&EN('1H90!S86UE(&]R9&5R(&QA:60@$
XM;W5T(&EN(&%S(&UA;GD@979E;B!C;VQU;6YS(&%S('=I;&P@9FET(&%C<F]SN
XM<R!T:&4`<&%G92!O<B!S8W)E96X[("=W=R<@:7,@=&AE('=I9'1H(&]F('1HW
XM92!S8W)E96X@;W(@<&%G92!I;B!C:&%R86-T97(`<&]S:71I;VYS.R`G;6TGR
XM(&ES('1H92!M;W-T("=W;W)D<R<@=&AE('5S97(@=V%N=',@<&5R(&QI;F4L%
XM('1O(&QI;6ET`'1H96T@8F5L;W<@=&AE(&UO<W0@<&]S<VEB;&4@:6X@8V%S\
XM92!A('-P87)S97(@;&%Y;W5T(&ES(&1E<VER960N`$EF(&EN9FEL92!A;F0OV
XM;W(@;W5T9FEL92!A<F4@;F]T('-P96-I9FEE9"P@=&AE>2!D969A=6QT('1O<
XM('-T86YD87)D`&EN<'5T(&%N9"!O=71P=70[('=I9'1H("AW=RD@9&5F875LP
XM=',@=&\@-S<@8V]L=6UN<R!T;R!M871C:"!T:&4`06UI9V%3:&5L;"!W:6YD3
XM;W<L(&%N9"!M87AC;VP@*&UM*2!D969A=6QT<R!T;R`H=VED=&@K,2DO,BX`+
XM("`@("`@("`@("`@("`@("`@("`@+W,O("!+96YT(%!A=6P@1&]L86XL(%53W
XM14YE=#H@>&%N=&AI86Y`=V5L;"YS9BYC82YU<P`P,3(S-#4V-S@Y`&-O;'5M1
XM;E]S970Z($5R<F]R("TM(&YO;BUD:6=I="!I;B!W:61T:"!P87)A;65T97(`X
XM,#$R,S0U-C<X.0!C;VQU;6Y?<V5T.B!%<G)O<B`M+2!N;VXM9&EG:70@:6X@D
XM;6%X8V]L('!A<F%M971E<@``````+6D`1E)/30!C;VQU;6Y?<V5T.B!%<G)O:
XM<B`M+2`G+6DG(&]R("=&4D]-)R!W87,@;&%S="!A<F=U;65N="!O;B!C;VUM>
XM86YD(&QI;F4`+6\`5$\`8V]L=6UN7W-E=#H@17)R;W(@+2T@)RUO)R!O<B`GC
XM5$\G('=A<R!L87-T(&%R9W5M96YT(&]N(&-O;6UA;F0@;&EN90`M=P!72414L
XM2`!C;VQU;6Y?<V5T.B!%<G)O<B`M+2`G+7<G(&]R("=724142"<@=V%S(&QAX
XM<W0@87)G=6UE;G0@;VX@8V]M;6%N9"!L:6YE`"UM`$U!6$-/3`!C;VQU;6Y?Y
XM<V5T.B!%<G)O<B`M+2`G+6TG(&]R("=-05A#3TPG('=A<R!L87-T(&%R9W5M@
XM96YT(&]N(&-O;6UA;F0@;&EN90``````8V]L=6UN7W-E=#H@17)R;W(@+2T@"
XM<')O8FQE;2!W<FET:6YG($]U=$9I;&4@/2``/P!C;VQU;6Y?<V5T.B!%<G)O4
XM<B`M+2!U;F%B;&4@=&\@8V]R<F5C=&QY('!A<G-E(&-O;6UA;F0@;&EN92$`@
XM`````&-O;'5M;E]S970Z($5R<F]R("TM('5N86)L92!T;R!O<&5N(&YE=R!W$
XM;W)K(&9I;&4@5#IC;VQU;6Y?<V5T+G1E;7``8V]L=6UN7W-E=#H@17)R;W(@4
XM+2T@9FEL92!O<&5N(&9A:6QE9"!F;W(@26Y&:6QE(#T@`&-O;'5M;E]S970Z?
XM($5R<F]R("TM('-T86YD87)D(&EN<'5T(&QO;VMS(&5M<'1Y(&EN(&-O=6YT\
XM:6YG('!A<W,`8V]L=6UN7W-E=#H@17)R;W(@+2T@:6YP=70@9FEL92!L;V]K1
XM<R!E;7!T>2!I;B!C;W5N=&EN9R!P87-S`&-O;'5M;E]S970Z($5R<F]R("TMN
XM('!R;V)L96T@=W)I=&EN9R!T;R!F:6QE(%0Z8V]L=6UN7W-E="YT96UP`&-O5
XM;'5M;E]S970Z($5R<F]R("TM('5N86)L92!T;R!C;&]S92!F:6QE(%0Z8V]L!
XM=6UN7W-E="YT96UP(&%F=&5R`"!C;W5N=&EN9R!P87-S`&-O;'5M;E]S970ZB
XM($5R<F]R("TM('5N86)L92!T;R!O<&5N(&9I;&4@5#IC;VQU;6Y?<V5T+G1E^
XM;7`@8F5F;W)E`"!W<FET:6YG('!A<W,`8V]L=6UN7W-E=#H@17)R;W(@+2T@B
XM1FEL92!R96]P96X@9F%I;&5D(&9O<B!);D9I;&4@/2``8V]L=6UN7W-E=#H@\
XM17)R;W(@+2T@9FEL92!O<&5N(&9A:6QE9"!F;W(@3W5T1FEL92`](`!C;VQU*
XM;6Y?<V5T.B!%<G)O<B`M+2!496UP;W)A<GD@26YP=70@1FEL92!,;V]K<R!%D
XM;7!T>2!);B!7<FET:6YG(%!A<W,`8V]L=6UN7W-E=#H@17)R;W(@+2T@<')OD
XM8FQE;2!R96%D:6YG(&9R;VT@5#IC;VQU;6Y?<V5T+G1E;7``8V]L=6UN7W-E^
XM=#H@17)R;W(@+2T@26YP=70@1FEL92!,;V]K<R!%;7!T>2!);B!7<FET:6YG4
XM(%!A<W,`8V]L=6UN7W-E=#H@17)R;W(@+2T@<')O8FQE;2!R96%D:6YG(&9R1
XM;VT@5#IC;VQU;6Y?<V5T+G1E;7`````".DY5``!@``G,3E4``$ZY```(+C\\6
XM`$9(>0```DQ.N0``"%I.N0``""X_/``82'D```*33KD```A:3KD```@N/SP`%
XM24AY```"K$ZY```(6DZY```(+C\\`$5(>0```O9.N0``"%I.N0``""X_/`!(`
XM2'D```,\3KD```A:3KD```@N/SP`2$AY```#A4ZY```(6DZY```(+C\\`$5(@
XM>0```\Y.N0``"%I.N0``""X_/``V2'D```043KD```A:3KD```@N/SP`1$AY@
XM```$2TZY```(6DZY```(+C\\`$A(>0``!)!.N0``"%I.N0``""X_/`!"2'D`Q
XM``393KD```A:3KD```@N/SP`1$AY```%'$ZY```(6DZY```(+C\\`$5(>0``+
XM!6%.N0``"%I.N0``""X_/`!!2'D```6G3KD```A:3KD```@N/SP`1$AY```%@
XMZ4ZY```(6DZY```(+C\\`$!(>0``!BY.N0``"%I.N0``""X_/``[2'D```9O1
XM3KD```A:3KD```@N/SP`24AY```&JTZY```(6DZY```(+DZY```(+F````).O
XM74YU3E7_VF```<Y.5?_\-"T`$%)"1;Q__@@"``!G`E)"GL(F;0`,*T\`#"1/K
XM4T(4VU'*__Q";?_^-"W__D6M`!`F;0`,>``8,R``2D1G``"*/SP`"DAY```&S
XM]30M__Y%K0`0)FT`#!\S(`!"9S\\``E.N0``!4X[0/_\#&W____\9@``(C\\8
XM`#%(>0``!P!.N0``"%I.N0``""YP`&```$A@```F)FT`$C03Q?P`"C@"2,2TN
XMA&<&`#P``DYVU&W__$YV)FT`$C:"-"W__E)"3G8[0O_^8`#_8G`!8```"G`".
XM3KD```!&3ET@7T_O``Y.T$Y5__PT+0`04D)%O'_^"`(``&<"4D*>PB9M``PKS
XM3P`,)$]30A3;4<K__$)M__XT+?_^1:T`$"9M``QX`!@S(`!*1&<``(H_/``*Z
XM2'D```<R-"W__D6M`!`F;0`,'S,@`$)G/SP`"4ZY```%3CM`__P,;?____QF`
XM```B/SP`,DAY```'/4ZY```(6DZY```(+G``8```2&```"8F;0`2-!/%_``*/
XM.`)(Q+2$9P8`/``"3G;4;?_\3G8F;0`2-H(T+?_^4D).=CM"__Y@`/]B<`%@,
XM```*<`).N0```$9.72!?3^\`#D[0/RT`&B\M`!9"9TAY```'<$ZY```!B#\MR
XM`!0O+0`00F=(>0``!W).N0```8@F;0`,0E-";?_Z0FW__@QM``___FX``!HT\
XM+?_^1;P`#^-"1^W_VD)S(`!2;?_^:-XT.0````Q%O'__.T+__#M\``'__C0M)
XM__ZT;?_\;``#BC0M__Y%O`#_Y4(F>0````@_/`#_+S,@`#\\``)(>0``!W1.!
XMN0```084``P"``%G```T-"W__D6\`/_E0B9Y````"#\\`/\O,R``/SP`!$AYF
XM```'=TZY```!!A0`#`(``68``&PT+?_^4D).=K1M__QM```B/SP`14AY```'J
XM?$ZY```(6DZY```(+G``8``$UF```#@_+0`:+RT`%C0M__Y20DYV1;P`_^5"Y
XM)GD````(/SP`_R\S(`!.N0```8@T+?_^5$).=CM"__Y@``*X-"W__D6\`/_E"
XM0B9Y````"#\\`/\O,R``/SP``DAY```'PDZY```!!A0`#`(``6<``#0T+?_^6
XM1;P`_^5")GD````(/SP`_R\S(``_/``"2'D```?%3KD```$&%``,`@`!9@``K
XM;#0M__Y20DYVM&W__&T``"(_/`!#2'D```?(3KD```A:3KD```@N<`!@``0(=
XM8```.#\M`!0O+0`0-"W__E)"3G9%O`#_Y4(F>0````@_/`#_+S,@`$ZY```!,
XMB#0M__Y40DYV.T+__F```>HT+?_^1;P`_^5")GD````(/SP`_R\S(``_/``"J
XM2'D```@,3KD```$&%``,`@`!9P``-#0M__Y%O`#_Y4(F>0````@_/`#_+S,@)
XM`#\\``5(>0``"`].N0```084``P"``%F``!\-"W__E)"3G:T;?_\;0``(C\\'
XM`$9(>0``"!5.N0``"%I.N0``""YP`&```SI@``!()FT`#$)3+RT`##0M__Y2+
XM0DYV1;P`_^5")GD````(/SP`_R\S(`!(56$`^UX4`$H"9@``"'``8``"_#0MD
XM__Y40DYV.T+__F```0PT+?_^1;P`_^5")GD````(/SP`_R\S(``_/``"2'D`D
XM``A<3KD```$&%``,`@`!9P``-#0M__Y%O`#_Y4(F>0````@_/`#_+S,@`#\\3
XM``9(>0``"%].N0```084``P"``%F``!\-"W__E)"3G:T;?_\;0``(C\\`$=(L
XM>0``"&9.N0``"%I.N0``""YP`&```EQ@``!()FT`"$)3+RT`"#0M__Y20DYVM
XM1;P`_^5")GD````(/SP`_R\S(`!(56$`^V84`$H"9@``"'``8``"'C0M__Y49
XM0DYV.T+__F```"XT+?_Z1;P`#^-"1^W_VC>M__X@`#0M__I20DYV.T+_^C0MT
XM__Y20DYV.T+__F``_&Y";?_^/RT`&B\M`!9"9TAY```(KDZY```!!A0`#`(`-
XM`68``$XT+?_^M&W_^FP``$(_+0`:+RT`%C0M__Y%O``/XT)'[?_:.#,@`$F\#
XM`/_E1"9Y````"#\\`/\O,T``3KD```&(-"W__E)"3G8[0O_^/RT`%"\M`!!"9
XM9TAY```(L$ZY```!!A0`#`(``68``$XT+?_^M&W_^FP``$(_+0`4+RT`$#0MX
XM__Y%O``/XT)'[?_:.#,@`$F\`/_E1"9Y````"#\\`/\O,T``3KD```&(-"W_J
XM_E)"3G8[0O_^)FT`#$I39@``6#0M__ZT;?_Z;```3"\M``PT+?_^1;P`#^-"U
XM1^W_VC@S(`!)O`#_Y40F>0````@_/`#_+S-``$A580#Y$!0`2@)F```(<`!@M
XM``"N-"W__E)"3G8[0O_^)FT`#$I39@``"B9M``PVO`!-)FT`"$I39@``6#0M_
XM__ZT;?_Z;```3"\M``@T+?_^1;P`#^-"1^W_VC@S(`!)O`#_Y40F>0````@_Q
XM/`#_+S-``$A580#YA!0`2@)F```(<`!@```\-"W__E)"3G8[0O_^)FT`"$I3:
XM9@``&"9M``PT$U)"3G9(PH7\``(F;0`(-H)P`6````IP`DZY````1DY=(%]/O
XM[P`43M!.50``/SP`+TAY```(LDZY```(6C\\`/](>0```#A.N0``"%I.N0``U
XM""Y*.0````-G```>2'D````$3KD```%0/SP`$4AY```".DZY```!E$HY````&
XM`F8```A.N0``!`A@```"3EU.=0QY``$````,8P``-"1Y````""9J``0_/`#_O
XM2%,_/``!2'D```CB3KD```$&%``,`@`!9@``"F$`]?Y@``>H/SP`_TAY```!"
XM.#\\`/](>0```#A(>0```#1(>0```#!A`/=Z%`!*`F8``"`_/``\2'D```CDM
XM3KD```A:3KD```@N80#UM&``!UX_/`#_2'D```$X0F=(>0``"2%.N0```084?
XM``P"``%F```.$_P``0````-@```(0CD````#/SP`_TAY````.$)G2'D```DC%
XM3KD```$&%``,`@`!9@``#A/\``$````"8```"$(Y`````DHY`````V<``$1(5
XM>0````0_/``12'D```(Z'SP``4ZY```!L$HY````!&<``!P_/`!#2'D```DE1
XM3KD```A:3KD```@N8``&KF```$8_/`#_2'D```$X3KD```-J2CD```"?9@``0
XM+#\\`#-(>0``"6E.N0``"%H_/`#_2'D```$X3KD```A:3KD```@N8``&9D)Y7
XM````-D)Y````,A/\``$````!2CD````#9P``,DAY```".4ZY````$$HY````I
XM`V<``!@_/`!`2'D```F=3KD```A:0CD````!8```+DAY```".4ZY```$+$HY-
XM````GV8``!@_/``\2'D```G>3KD```A:0CD````!2CD````!9@``.$ZY```(2
XM+DAY````!$ZY```!4#\\`!%(>0```CI.N0```91*.0````-F```(3KD```/D2
XM8``%K$HY`````V<``%9(>0````0?.0```CE.N0``!%`,.0`!````!&8``#@_N
XM/``^2'D```H;3KD```A:3KD```@N2'D````$3KD```%0/SP`$4AY```".DZYS
XM```!E&``!4X,.0`*```".6<``!8T.0```#)20DYV,\(````R8```(C0Y````<
XM,K1Y````-F\```PS^0```#(````V0GD````R2CD````#9P``($AY```".4ZYA
XM````$$HY`````V<```9@```D8```'$AY```".4ZY```$+$HY````GV8```9@D
XM```&8`#_'DHY`````V<``*1(>0````1.N0```5`,.0`!````!&8``"P_/`!!)
XM2'D```I:3KD```A:/SP`#DAY```*G$ZY```(6DZY```(+F``!'Q(>0````0_(
XM/``12'D```(Z0B=.N0```;!*.0````1G```\/SP`04AY```*JTZY```(6C\\K
XM``U(>0``"NU.N0``"%I.N0``""X_/``12'D```(Z3KD```&48``$(&```$Q..
XMN0```^0_/`#_2'D```$X3KD```-J2CD```"?9@``+#\\`#5(>0``"OM.N0``Y
XM"%H_/`#_2'D```$X3KD```A:3KD```@N8``#TDHY`````F8``&(_/`#_2'D`Y
XM```X3KD```.F2CD```"?9@``2#\\`#1(>0``"S%.N0``"%H_/`#_2'D````X`
XM3KD```A:3KD```@N2'D````$3KD```%0/SP`$4AY```".DZY```!E&```V@TG
XM.0```#120DYV.#D````V4D1.=DC"A<0SP@```"XT.0```"ZT>0```#!O```,O
XM,_D````P````+@QY``$````N;P``/C0Y````+L7Y````-C@"2,2TA&<&`#P`A
XM`DYV.#D````TF$).=C0Y````+E-"3G9(Q(G",\0````J8```"$)Y````*D)Y]
XM````,D)Y````+$HY`````V<``(9(>0````1(>0```CE.N0```^1*.0````1GI
XM``!F2CD````%9P``'#\\`$5(>0``"V9.N0``"%I.N0``""Y@```2/SP`.TAYR
XM```+K$ZY```(6DAY````!$ZY```!4#\\`!%(>0```CI.N0```91*.0````)F-
XM```(3KD```0(8``"3&```$A(>0```CE.N0``!"Q*.0```)]F```R/SP`.TAY5
XM```+Z$ZY```(6DZY```(+DHY`````F8```A.N0``!`A.N0```^1@``("##D`V
XM"@```CEG```\-#D````R4D).=C/"````,DHY`````F<``!(?.0```CE.N0``>
XM`/Y@```.'SD```(Y3KD```?*8```NC0Y````+%)"3G8SP@```"PT.0```"RT0
XM>0```"YL``!P-#D````R4D).=C/"````*#0Y````-M1Y````*DYV/P(T.0``C
XM`"BT5VX``#Y*.0````)G```0'SP`($ZY````_F```!X?/``@3KD```?*2CD`O
XM``"?9@``"F$`^/1@``$\4GD````H:+A4CV```"9*.0````)G```,3KD```$D9
XM8```#!\\``I.N0``!\I">0```"Q">0```#)*.0````-G``!T2'D````$2'D`D
XM``(Y3KD```/D2CD````$9P``5$HY````!6<```I@``!H8```0C\\`#M(>0``%
XM#"1.N0``"%I(>0````1.N0```5`_/``12'D```(Z3KD```&42CD````"9@``&
XM"$ZY```$"&```(Q@```<2'D```(Y3KD```0L2CD```"?9@``!F````9@`/YJR
XM2GD````L9P``($HY`````F<```Q.N0```21@```,'SP`"DZY```'RDHY````&
XM`V<``")(>0````1.N0```5`_/``12'D```(Z3KD```&48```"$ZY```#Y$HYG
XM`````F8```A.N0``!`A.74YU``````/L````N`````$``!X,```=]@``'>8`9
XM`!W<```=O@``';0``!V6```=?@``'7(``!UB```=5@``'4```!TV```=*@``K
XM'20``!T:```=%```'0X``!SP```<X@``'*X``!RB```<F```')(``!R,```<,
XM@@``''@``!QR```<;```'&(``!Q2```<0@``'#@``!PR```<*```'!X``!P"T
XM```;\```&]8``!N^```;L@``&Z(``!N6```;?```&VX``!MD```;6```&U(`/
XM`!M(```;0@``&SP``!LV```;+```&QX``!L4```;````&OH``!KP```:Z```2
XM&N0``!K:```:U```&LX``!K````:M@``&J8``!J6```:A```&G0``!I:```:<
XM3```&C8``!HF```:#```&>X``!G8```9R```&;H``!FL```9H@``&8P``!E\H
XM```9;@``&6```!E6```9.```&1H``!D0```9"@``&00``!D````8]@``&/``+
XM`!CF```8W```&-(``!C````8L```&)X``!B0```8@@``&'P``!AR```87@``(
XM&%(``!A"```8,@``&"P``!@@```8!@``%_P``!?P```7U@``%\P``!?&```7&
XMO@``%[@``!>B```7D@``%W@``!=:```73```%SP``!<R```7*```%R(``!<85
XM```7````%O@``!;N```6Y```%LP``!;$```6I@``%I```!:*```6A```%GH`+
XM`!98```6(```%A0``!8$```5^@``%>@``!78```49```$_@``!-4```3*@``(
XM$O@``!)V```23```$AH``!&H```1?@``$4P``!#:```0L```$'X``!`&```/>
XM\```#WX```]*```.F```#F0```WR```-W```#<8```VP```-F@``#80```UN9
XM```-6```#4(```TL```-%@``#0````SJ```,U```#+X```RH```,D@``#'P`7
XM``Q@````%@````(``!9$```6.@``%6H``!3X```4I@``%#H``!.(```3&```'
XM$N8``!*J```2.@``$@@``!':```1;```$3H``!$,```0G@``$&P``!!"```.T
XM\```#]8``!7`````;P````,``!VB```<T```&^(``!IF```:&```&40``!@2]
XM```7A```#'(```R"```,B```#)@```R>```,K@``#+0```S$```,R@``#-H`/
XM``S@```,\```#/8```T&```-#```#1P```TB```-,@``#3@```U(```-3@``B
XM#5X```UD```-=```#7H```V*```-D```#:````VF```-M@``#;P```W,```-J
XMT@``#>(```WH```-^```#?X```X$```.G@``#J0```^$```/B@``$.```!#F(
XM```1K@``$;0``!)\```2@@``$UH``!-@```5W@``%>X``!7T```6*@``%JP`'
XM`!:R```78```%V8``!=^```7F```%Z@``!>N```7]@``&`P``!@F```8/```'
XM&&@``!BD```8J@``&3X``!F"```9D@``&9@``!G.```9W@``&>0``!H"```:=
XM$@``&BP``!H\```:0@``&F```!IZ```:B@``&I```!N"```;B```&YP``!O(`
XM```;W```&_8``!O\```<#```'!(``!Q8```<R@``'0@``!U<```=B```'9P`+
XM`!W6```>!@``'A8````5````!```%@H``!8:```71@``&$@``!A8```8B```!
XM&+8``!C&```99@``&;0``!GT```:G```&JP``!M>```;J```&[@``!TP```=Z
XM:```'7@``!WL```=_`````@````%```9)@``%^(``!?<```9(```'$@``!R\,
XM```<^@``'<@````5````!@``#H````]F```/]@``$`P``!"$```0M@``$1H`_
XM`!%2```1A```$>@``!(@```24@``$OX``!,P```3_@``%$@``!1J```4M```-
XM%EX``!;2```7!@````````/R```#Z0```/X`````````````````````````8
XM`````````````````````````````````````````````````````````````
XM`#Y@``%28``"]DCG,``T`<3`)@%(0\;`2$-"0]2#2$#`P4A`0D#0@DS?``Q.J
XM=2\")`$B``R"``#__VX</$%"04A!@L(@`4A!,`Z`PC(`0D!(0,%!)!].=2`!?
XM0D!(0$A!0D$L0G0/TH'1@+W`;@20CE)!4<K_\L%!)!].=3\#2'H`%B\")`%;J
XMPVH"1((B`&JD1(%&`V">2@-G`D2`-A].=2`O``@B+P`$+'K_2"]7``A0CT[N%
XM_[X@+P`((B\`!"QZ_S(O5P`(4(].[O^X("\`""(O``0L>O\<+U<`"%"/3N[_U
XMLB`O``@B+P`$+'K_!B]7``A0CT[N_ZP@+P`((B\`!"QZ_O`O5P`(4(].[O_6;
XM("\`!"QZ_MXO5P`$6(].[O_$("\`!"QZ_LPO5P`$6(].[O_*("\`!"QZ_KHO>
XM5P`$6(].[O_<("\`!"QZ_J@O5P`$6(].[O_B*E]'^OZD)T__W"=(_^0G0/_@;
XM+'@`!"=.__QP`$/Z`>).KOW8)T#_^'``0_H!X$ZN_=@G0/_L<`!#^@'C3J[]2
XMV"=`__!P`$/Z`>=.KOW8)T#_Z'``0_H!Z$ZN_=@G0/_TD\E.KO[:*$!*K`"L=
XM9P``QI[\`(`@3R=(_\J>_`$`(D]P`#(\`/XD;`"LU<K5RB0J`#3EBB="_]@DE
XM:@`0U<K5RB#)4D!T`!0:4T(2VE-!4<K_^D(94T$D*__@)&O_Y&!4#`<`(&-.E
XM#$``(&1.4D`@R0P'`")F(A+'4T%B!$(98#H>&E.";PH,!P`B9NH2QU-!0AE3$
XM06,D8!P2QU-!8@1"&6`8'AI3@F\&#`<`(&+J0AE306,&'AI3@FZF-T#_SBQK_
XM__A.KO_*)T#_U$ZN_\0G0/_08&XG;`"$_]A![`!<3J[^@$'L`%Q.KOZ,)T#_?
XMQB1`+'K]3B1J`"0B*@``3J[_@B!J``0N#Y[\`0`B3T7Z`.!P$!+:4<C__'!_[
XM$MA7R/_\0ADB#R0\```#[4ZN_^(G0/_4)T#_T.6(($`I:``(`*0N1TGZ_01.^
XME2YZ_-H@.OS`9QPL>OSL(CK\P$ZN_]PL>``$3J[_?")Z_*9.KOZ&(GK\T"QX2
XM``1.KOYB(GK\N$ZN_F(B>ORT3J[^8B)Z_*1.KOYB(GK\J$ZN_F(@.OQN3G5D3
XM;W,N;&EB<F%R>0!G<F%P:&EC<RYL:6)R87)Y`&EN='5I=&EO;BYL:6)R87)Y_
XM`&QA>65R<RYL:6)R87)Y`&UA=&AF9G`N;&EB<F%R>0!205<Z,3`O,3`O,S(P5
XM+S@P+P```````^P````!`````@```#X````````#\@```^D```+1````````J
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````````````````````````````````````````
XM`````````````````````````&EN/B``(&YO="!F;W5N9`!O=70^(`````"@X
XM3E4``&``"GA.50``-#D`````1_D````$0C,@`#\\`$](>0````1.N0``"%I"H
XM>0````!.74YU3E4``#0Y`````$?Y````!!>M``@@`%)Y``````QY`$\`````&
XM9@``!&&H3ET@7U2/3M!.5?_\0FW__DAY````5$ZY````$`PY``@```!49@``;
XM,$IM__YC```D'SP`"$ZY````_A\\`"!.N0```/X?/``(3KD```#^4VW__F``8
XM`#H,.0`@````5&,``"X,;0!/__YD```D'SD```!43KD```#^-"W__D?Y````@
XM!!>Y````5"``4FW__@PY``@```!49P#_>`PY`"````!48@#_;$IM__YC``!N.
XM#&T`3__^9```9#0M__Y30D?Y````!`PS`"X@`&8``$Y";?_\-"W__D?Y````-
XM!#@M__PD;0`(%[)``"``-"W__"9M``@?,R``3KD```#^4FW__E)M__PT+0`,W
XM."W__+A"8@``"@QM`$___F:X-"W__D?Y````!$(S(`!.72!?7(].T$Y5```_U
XM/``$2'D```"@3KD```$R/RT`#"\M``AA`/ZZ##D`&P```%1G```T2'D```!Z:
XM/SP`3TAY````!$(G3KD```&P2CD```!Z9P``$C\\``I(>0```*5.N0```3).9
XMN0```21*.0```'IG```,##D`&P```%1FC`PY`!L```!45L)$`A/"`````Q/YJ
XM`````P```)].72!?7(].T$Y5```_/``%2'D```"P3KD```$R/RT`#"\M``AA@
XM`/X>##D`&P```%1G```<2'D```!6/SP`3TAY````!!\\``%.N0```;!.N0``4
XM`21*.0```%9G```,##D`&P```%1FI`PY`!L```!45L)$`A/"`````A/Y````D
XM`@```)].72!?7(].T$Y5``!(>0```'H_+0`,+RT`"$(G3KD```&P2CD```!ZL
XM5\)$`A/"````GQ/Y````GP````-.72!?7(].T$Y5``!(>0```%8_+0`,+RT`"
XM"!\\``%.N0```;!*.0```%97PD0"$\(```"?$_D```"?`````DY=(%]<CT[0H
XM3E4``$HY`````V<``!1(>0```'I.N0```5!".0````-.74YU3E4``$HY````)
XM`F<``!1(>0```%9.N0```5!".0````).74YU3E4``$HY`````V<``"9(>0``.
XM`'HO+0`(3KD```/D2CD```![5\)$`A/"````GV````PO+0`(3KD````03ET@/
XM7UB/3M!.50``2CD````#9P``)DAY````>B\M``A.N0```X9*.0```'M7PD0"F
XM$\(```"?8```"$(Y````GTY=(%]8CT[03E7_^D)M__XT+0`,.T+__$HY````5
XM`V<``%Y(>0```'I(;?_[3KD```/D#"T`(/_[8@``"DHY````>V?>-"W__K1MA
XM__QB```4-"W__B9M``@7K?_[(`!2;?_^2'D```!Z2&W_^TZY```#Y`PM`"#_T
XM^V+*8```M$AM__M.N0```!`,+0`@__MB```*#"T`&__[9N0,+0`(__MG```,&
XM#"T`(/_[8P``A`PM``C_^V8``#I*;?_^8P``+E-M__Y*.0```%5G```@'SP`1
XM"$ZY````_A\\`"!.N0```/X?/``(3KD```#^8```-#0M__ZT;?_\8@``*#0MN
XM__XF;0`(%ZW_^R``4FW__DHY````56<```P?+?_[3KD```#^2&W_^TZY````^
XM$&``_VPT+?_^M&W__&(```XT+?_^)FT`"$(S(``3[?_[````GDY=(%]<CT[0>
XM3E7_\&```#!.50``)FT`"#0K__PF;0`(1^O_\"1M``@5<R``__LF;0`(4FO_(
XM_$Y=(%]8CT[0/SP`"4AM__!A`/YP0FW__$A58;X,+0`@__MF```(2%5AL&#P'
XM#"T`+?_[9@``$!M\``'_^DA589I@```40BW_^@PM`"O_^V8```9(56&$#"T`@
XM,/_[90``;`PM`#G_^V(``&)";?_^$_P``0```)\T+?_^Q?P`"G@`&"W_^P1$N
XM`##41#M"__Y(56$`_T@,+0`P__ME```*#"T`.?_[8]!*+?_Z9P``$C0M__Y$#
XM0B9M``@V@F````HF;0`(-JW__F````A".0```)].72!?6(].T$Y5__!@```P-
XM3E4``"9M``@T*__\)FT`"$?K__`D;0`(%7,@`/_[)FT`"%)K__Q.72!?6(].!
XMT#\\``E(;?_P80#]:D)M__Q(56&^#"T`(/_[9@``"$A58;!@\`PM`##_^V4`M
XM`%0,+0`Y__MB``!*0FW__A/\``$```"?-"W__L3\``IX`!@M__L$1``PU$0[Q
XM0O_^2%5A`/]R#"T`,/_[90``"@PM`#G_^V/0)FT`"#:M__Y@```(0CD```"?<
XM3ET@7UB/3M!.50``2CD````"9P``%DAY````5A\M``A.N0``!%!@```,'RT`2
XM"$ZY````_DY=(%]4CT[03E4``$HY`````F<``!9(>0```%8_+0`(3KD```.VH
XM8```"$(Y````GTY=(%]4CT[03E4``$HY`````F<``!9(>0```%8?/``*3KD`5
XM``108```"$ZY```!)$Y=3G5.5?_\2CD````"9P``1D)M__XT+0`,."W__KA";
XM8@``,#0M__XF;0`(2C,@`&<``"!(>0```%8T+?_^)FT`"!\S(`!.N0``!%!2>
XM;?_^8,1@```0/RT`#"\M``A.N0```3).72!?7(].T$Y5__1";?_^-"T`"DI"`
XM;`)$0CM"__PT+?_^1^W_]'@`."W__(C\``I(1`9$`#`7A"``=``T+?_\A/P`H
XM"CM"__Q2;?_^2FW__&;,2FT`"FP``!0T+?_^1^W_]!>\`"T@`%)M__XT+0`(M
XMM&W__F,``!!3;0`('SP`(&$`][1@YE-M__XT+?_^1^W_]!\S(`!A`/>>2FW_&
XM_F;F80#W9DY=(%]8CT[03E7_\$)M__XT+?_^XT)'[?_P>``X+0`*B/P`"DA$<
XM-X0@`'0`-"T`"H3\``H[0@`*4FW__DIM``IFSC0M``BT;?_^8P``$%-M``@?=
XM/``@80#W.F#F4VW__C0M__[C0D?M__`X,R``!D0`,!\$80#W'$IM__YFWF$`,
XM]N1.72!?6(].T$Y5__!";?_^-"W__N-"1^W_\'@`."T`"@)$``<WA"``=``TD
XM+0`*YDH[0@`*4FW__@QM``7__F;02FT`"F8``!0T+?_^XT)'[?_P0G,@`&``Q
XM`!(T+?_^XT)'[?_P-[P``2``4FW__C0M``BT;?_^8P``$%-M``@?/``@80#V<
XMC&#F4VW__C0M__[C0D?M__`X,R``!D0`,!\$80#V;DIM__YFWF$`]C9.72!?1
XM6(].T$Y5``!@``!`3E4``'0`-"T`#`)"``\[0@`,#&T`"@`,9```#`9M`#``*
XM#&````@&;0`W``PT+0`,'P)A`/8>3ET@7UR/3M`,;0`$``AC```04VT`"!\\[
XM`"!A`/8`8.AT`#0M``IX#.AJ/P)(56&:=``T+0`*X$H_`DA588QT`#0M``KHH
XM2C\"2%5A`/]^/RT`"DA580#_=&$`]91.72!?6(].T!/\``$```!53EU.=0``9
XM`^P```!9`````P``"SP```B,```(8```"#X```@T```((@``"`X```@$```'C
XMV@``!]````>^```'?```!OH```:@```%]```!;@```5N```%#```!.8```3,3
XM```$P@``!*0```2:```$D```!(````1V```$5@``!$P```0\```$,@``!"0`F
XM``08```$#@``!`````/T```#Z@```]@```/4```#S@```\0```.L```#F@``L
XM`Y8```.0```#A@```W````->```#6@```U0```-*```#0````S0```,>```#H
XM%````PH```+P```"V@```M8```+0```"Q@```KP```*P```"G@```I````*"'
XM```">````FX```)4```".@```?(```':```!N````:P```&>```!F````8@`Q
XM``%T```!.@```2P```$0```!"````/P```#V````Z````-P```#.````R```#
XM`.(```"V````#@````0```**```#*````X````.^```#^@``!!X```1&```$2
XMB@``!-8```46```'Y```"!@```A(```(G@```!4````%```!,@```5````%:Y
XM```!9````8X```(2```"6@```J0```*J```"]@```RX```1D```%+```!7P`Y
XM``6&```%D```!<8```70```'\@``"%(```BV`````````_(```/I```!,```C
XM```````$3E4``&``!*).5?_\)FT`"$H39P``!F```'(D*P`*M*L`%F<``!XO$
XM"R\K``8O*P`6+SS_____3KD```%6)E\K0/_\)"L`%M2K`!XG0@`*0BL`(B\+)
XM+RL`!B\K``XO*P`>3KD```',)E\K0/_\#*W_______QF```4%KP``2\+3KD`]
XM``#`)E\G0``"3ET@7UB/3M!.5?_\)FT`#$HK`")G```.+PLO+0`,80#_7B9?+
XM2A-G```*0JL`&F```(8D*P`*M*T`"&<``!XO"R\K``8O+0`(+SS_____3KD`N
XM``%6)E\K0/_\+PLO*P`&+RL`#B\K`!).N0```2(F7RM`__P,K?_______&8`;
XM`!H6O``!+PM.N0```,`F7R=```(K:P`2__PG;0`(`!9T`"="`!HG;?_\`!XDY
XM*P`6U*L`'B="``I.72!?4(].T$Y5```F;0`(2BL`(F<```XO"R\M``AA`/ZHG
XM)E\O"R\K``9.N0```!0F7R\++RL`#B\K`!).N0```/8F7TY=(%]8CT[03E7_@
XM_B9M``@O"TZY````2AM`__].72!?7(].T$Y5__PF;0`00A-"*P`!=``G0@`"3
XM=``G0@`*)WD``````!(O"R\K`!)"ITZY````:"9?)T``#G0`)T(`%G0`)T(`A
XM&G0`)T(`'D(K`")*JP`.9@``"A:\``)@``"@2BT`"&<``#HO"R1M``HO"B\\$
XM```#[DZY````\B9?)T``!DJK``9F```4%KP``2\+3KD```#`)E\G0``"8```S
XM2"\+)&T`"B\*+SP```/M3KD```#R)E\G0``&2JL`!F8``!@6O``!+PM.N0``I
XM`,`F7R=```)@```0+PLO+0`00J=A`/X,)E]*$V<``!0O"R\K``XO*P`23KD`*
XM``#V)E].72!?3^\`#$[03E4``"9M``PD+0`(M*L`%F4``"0D*P`6U*L`'B@M]
XM``BX@F0``!(D+0`(E*L`%B="`!I@```2+PLO+0`,+RT`"&$`_:0F7TY=(%]0B
XMCT[03E4``"9M``PD*P`6U*L`&B1M``@D@DY=(%]0CT[03E7__"9M``PD*P`>]
XMM*L`$F0``!0D*P`6U*L`'B1M``@D@F```#HO"R\K``9"IR\\`````4ZY```![
XM5B9?*T#__"\++RL`!B\K``HO//____].N0```58F7R1M``@D@$Y=(%]0CT[0M
XM3E7__B\M``Q(;?_^3KD```/D+RT`#$AM__].N0```^0F;0`(-JW__DY=(%]0F
XMCT[03E7__CMM``C__B\M``H?+?_^3KD```10+RT`"A\M__].N0``!%!.72!?Y
XM7(].T$Y5__PF;0`,)"L`&K2K`!YD``!")"L`#M2K`!HK0O_\)&W__")M``@2E
XMDE*K`!HD*P`:M*L`$F8``!@O"R\M``PD*P`6U*L`&B\"80#\:B9?8```$A:\B
XM``$7?``!``$D;0`(0A).72!?4(].T$Y5__PF;0`*%WP``0`B)"L`#M2K`!HK\
XM0O_\)&W__!2M``@D*P`:M*L`'F8```92JP`>4JL`&B0K`!JTJP`29@``&"\+H
XM+RT`"B0K`!;4JP`:+P)A`/OV)E].72!?7(].T"0\```$`"/"`````$Y=3G4`6
XM``/L````!P````0```2X```!S````Y0```.B```#R@```]@````$````#@``Y
XM``<```!`````:@```(@```#B````_````1H```%T```!H````B0```(^```"P
XM7````G8```-6```#<@````,````(```!A@```=P```*D`````````_(```/I8
XM````8@`````````$3E4``&```79.50``0CD````#2CD````"9P``%B9M``@6T
XMN0````%".0````)@```X+SD````2)FT`""\++SP````!3KD```$B)`!*@F8`*
XM``X3_``!`````V````PF;0`($],````!3ET@7UB/3M!.5?_\0CD````#2CD`=
XM```"9P``%B9M``@6N0````%".0````)@``!*+SD````2+SP````!3KD```&TS
XM%`!*`F<``"HO.0```!(F;0`(+PMT`2\"3KD```$B*T#__"9M``@3TP````%@8
XM```()FT`"$(33ET@7UB/3M!.50``$_P``0````).74YU3E7__"\Y````#D?M2
XM``@O"W0!+P).N0```<PK0/_\3ET@7U2/3M!.50``'SP`"F'03EU.=4Y5__I"2
XM;?_Z-"T`##@M__JX0F(``!@T+?_Z)FT`"$HS(`!G```(4FW_^F#<+SD````.0
XM)FT`""\+=``T+?_Z+P).N0```<PK0/_\3ET@7UR/3M!.74YU```#[`````4`C
XM```"```!8````00```"Z````H````#H````-````!0```/8```#8````E@``R
XM`)````""````?````&H```!<````,````"H````<````%@````0````%````I
XM!P```$P```"L````R@```10```%T`````````_(```/I```!:P````!.50``#
XM8``%G$Y5__Y";?_^-"W__B9M``A*,R``9P``"%)M__Y@ZC`M__Y@```"3ET@?
XM7UR/3M!.5?_^0FW__C0M__XF;0`(2C,@`&<``#`T+?_^)FT`"#@M__XD;0`(5
XM'#)```P&`&%E"@P&`'IB!`(&`%\7AB``4FW__F#"3ET@7UR/3M!.5?_^0FW_E
XM_C0M__XF;0`.."W__B1M``@<,R``O#)``&8``"`T+?_^)FT`#DHS(`!F```(E
XM<`%@```\4FW__F````9@```$8,`T+?_^)FT`#C@M__XD;0`('#,@`+PR0`!CM
XM```,<`)@```,8```"'``8````DY=(%]/[P`,3M!.50``-"T`$E)""`(``&<"3
XM4D*>PB9M``XK3P`.)$]30A3;4<K__#0M``Q20@@"``!G`E)"GL(F;0`(*T\`G
XM""1/4T(4VU'*__P_+0`2+RT`#F$`_N(_+0`,+RT`"&$`_M8_+0`2+RT`#C\MC
XM``PO+0`(80#_$&````).72!?3^\`#$[03E7__D)M__XT+?_^)FT`"$HS(`!G=
XM```L-"T`$C@M__ZX0F0``!XT+?_^)FT`#C@M__XD;0`(%[)``"``4FW__F#&"
XM-"W__B9M``Y",R``3ET@7T_O``Q.T$Y5__Q";?_^/RT`$B\M``YA`/X:.T#_+
XM_#0M__XF;0`(2C,@`&<``#(T+0`2M&W__&(```9@```H-"W__"9M``XX+?_^)
XM)&T`"!>R0``@`%)M__Q2;?_^8,!@```$8+HT+?_\)FT`#D(S(`!.72!?3^\`0
XM#$[03E7_\#\M``XO+0`*80#]JCM`__X_+0`4+RT`$&$`_9H[0/_\-"T`%#M"H
XM__HT+?_\E&T`"%)".T+_^#MM__S_]C0M__;4;?_^.T+_]#0M``C4;?_^M&W_)
XM^F4``"(T+?_ZE&T`"#M"__XT+?_Z)FT`$$(S(`!";?_X8```3#0M``C4;?_^I
XMU&W_^+1M__IE```X-"W_^B9M`!!",R``-"T`"-1M__XX+?_ZF$([1/_X-"T`W
XM"-1M__A30CM"__8T+?_Z4T([0O_T.VW_]O_P.VW_]/_R2FW_^&,``"8T+?_R'
XM)FT`$#@M__`D;0`0%[)``"``4VW_\E-M__!3;?_X8-0[;0`(__)";?_P2FW_!
XM_F,``"8T+?_R)FT`$#@M__`D;0`*%[)``"``4FW_\E)M__!3;?_^8-1.72!?-
XM3^\`#D[03E7__$)M__X[;0`(__PT+?_^)FT`"DHS(`!G```^-"T`%+1M__QF3
XM```2-"W__"9M`!!",R``8```(C0M__PF;0`0."W__B1M``H7LD``(`!2;?_\'
XM4FW__F"T3ET@7T_O``Y.T$Y5__PT+0`*U&T`"#M"__X[;0`*__PT+?_^)FT`.
XM#$HS(`!G```B-"W__"9M``PX+?_^)&T`#!>R0``@`%)M__Y2;?_\8-`T+?_\7
XM)FT`#$(S(`!.72!?3^\`"D[03E7__#MM``K__D)M__Q*;0`(8P``1#0M__XFE
XM;0`,2C,@`&<``#0T+0`6."W__+A"9```)C0M__PF;0`2."W__B1M``P7LD``5
XM(`!2;?_^4FW__%-M``A@MC0M__PF;0`20C,@`$Y=(%]/[P`03M!.5?_Z.VT`D
XM"O_^-"W__K1M``AB``!J0FW__#MM__[_^C0M__PF;0`,2C,@`&8```HP+?_^$
XM8```3C0M__HF;0`22C,@`&8```AP_V```#@T+?_Z)FT`$C@M__PD;0`,'#,@J
XM`+PR0`!G```&8```#%)M__Q2;?_Z8*A2;?_^8(QP_V````).72!?3^\`$$[00
XM3E7__CMM``K__C0M__ZT;0`(8@``-#0M__XF;0`.2C,@`&<``"0T+?_^)FT`$
XM#A@S(`"X+0`,9@``"C`M__Y@```.4FW__F#"</]@```"3ET@7T_O``Q.T$Y=.
XM3G4``````^P````!````!@`````````````#\@```^D```"/``````````1!N
XM^O_Z(6S_^/_\3G4B+P`$+'K_YB]7``18CT[N_]PB+P`$+'K_U"]7``18CT[N8
XM_X@B+P`$+'K_PB]7``18CT[N_X(B+P`$+'K_L$ZN_[A$`"!?6(].T"(O``0L7
XM>O^<+U<`!%B/3N[_H"(O``@D+P`$+'K_ADZN_YI$`"!?4(].T"(O``@D+P`$!
XM+'K_;DZN_Y1$`"!?4(].T"(O``@D+P`$+'K_5DZN_XY$`"!?4(].T"QZ_T9./
XM[O_*+'K_/D[N_WPB+P`$+'K_,DZN_RA$`"!?6(].T"(O``@D+P`$+'K_&B]7=
XM``A0CT[N_ZPB+P`()"\`!"QZ_P0O5P`(4(].[O_B+'K^]D[N_\0B+P`$+'K^#
XMZB]7``18CT[N_RXB+P`,)"\`""8O``0L>O[0+U<`#$_O``Q.[O_6(B\`""0OB
XM``0L>OZX3J[_LD0`(%]0CT[0(B\`#"0O``@F+P`$+'K^G"]7``Q/[P`,3N[_U
XMOB(O``@D+P`$+'K^A$ZN_TQ$`"!?4(].T"(O``@D+P`$+'K^;$ZN_T9$`"!?A
XM4(].T"(O``0L>OY8+U<`!%B/3N[_IB(O``@D+P`$+'K^0DZN_S1$`"!?4(].5
XMT"(O``PD+P`()B\`!"QZ_B8O5P`,3^\`#$[N_]`B+P`,)"\`""8O``0L>OX*1
XM3J[_(D0`(%]/[P`,3M`B+P`$+'K]]"]7``18CT[N_VHB+P`$+'K]XB]7``18&
XMCT[N_V0B+P`$+'K]T"]7``18CT[N_T````/L`````0````<````$````````=
XM`_(```/I````3P````!.=2`O`!0B+P`0)"\`#"!O``@B;P`$+'@`!"]7`!1/3
XM[P`43N[]EB`O``@B;P`$+'@`!"]7``A0CT[N_S0@;P`(("\`!"QX``0O5P`(B
XM4(].[O]&(&\`!"QX``0O5P`$6(].[O\B("\`""(O``0L>``$+U<`"%"/3N[_E
XM.B(O``0L>``$+U<`!%B/3N[_*"!O``PB;P`(("\`!"QX``0O5P`,3^\`#$[N2
XM_9`@;P`,(F\`""`O``0L>``$+U<`#$_O``Q.[OV*(&\`#")O``@@+P`$+'@`&
XM!"]7``Q/[P`,3N[_0"!O``0L>``$+U<`!%B/3N[_'")O``@@+P`$+'@`!"]7X
XM``A0CT[N_RXB;P`*)&\`!C`O``0L>``$+U<`"D_O``I.[O^R(F\`!"QX``0O`
XC5P`$6(].[OWJ``````/L`````0````@``````````````_*R$
X``
Xend
Xsize 18260
SHAR_EOF
echo "End of archive 1 (of 1)"
# if you want to concatenate archives, remove anything after this line
exit